package com.ismt.servletP3;

import java.io.IOException;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class ServletP3 extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
		doGet(request, response);
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
		
		
		String url = "";
		if (request.getServerName().equals("127.0.0.1") || request.getServerName().equals("localhost")) {
			url = "http://" + request.getServerName() + ":8888";
		} else {
			url = "http://" + request.getServerName();
		}
		
		String address 			= request.getRequestURL().toString();
		String resposta		 	= "";
		
		Utilizador utilizadorAutenticado = null;
		
		Cookie[] getCookie = request.getCookies();
		
		if(getCookie != null) {
			for(int i = 0; i < getCookie.length; i++) {
				if(getCookie[i].getName().equals("p3jfidalgo")) {
					String cookie 				= getCookie[i].getValue();
					
					utilizadorAutenticado	 	= Utilizador.verificarLogin(cookie, request.getRemoteAddr());
					
					if(utilizadorAutenticado != null) {
						resposta = "1";
					} else {
						resposta = "-1";
					}
				}
			}
		}
		
		if(address.indexOf("/registar-utilizador") !=- 1) {
			response.setContentType("text/html");
			
			String nome 		= request.getParameter("nome");
			String email 		= request.getParameter("email");
			String password 	= request.getParameter("password");
			String password2 	= request.getParameter("password2");
			
			resposta = Utilizador.registo(nome, email, password, password2);
			
			response.getWriter().println(resposta);
			
			if(resposta == "1" || resposta == "2") {
				response.setHeader("Refresh", "3; URL=" + url);
			} else {
				response.setHeader("Refresh", "3; URL=" + url + "/registo.html");
			}
		}
		
		else if(address.indexOf("/login") != -1) {	
			response.setContentType("text/html");
			
			String email 		= request.getParameter("email");
			String password 	= request.getParameter("password");
			
			utilizadorAutenticado = Utilizador.login(request, response, email, password);
			
			if(utilizadorAutenticado != null) {
				resposta = "1";
				response.getWriter().println(resposta);
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");
			} else {
				resposta = "-1";
				response.getWriter().println(resposta);
				response.setHeader("Refresh", "3; URL=" + url);
			}
		}
		
		else if(address.indexOf("/logout") != -1) {
			response.setContentType("text/html"); 
			
			resposta = Utilizador.logout(utilizadorAutenticado, response);
			 
			 Cookie[] delCookie = request.getCookies();
			 if(delCookie != null) {
				for(int i = 0; i < delCookie.length; i++) {
					if(delCookie[i].getName().equals("p3jfidalgo")) {
						delCookie[i].setMaxAge(0);
					}
				}
			 }
			 
			 utilizadorAutenticado = null;
			 
			 response.getWriter().println(resposta);
			 response.setHeader("Refresh", "3; URL=" + url);
		}
		
		else if(address.indexOf("/perfil") != -1) {
			response.setContentType("text/html");
			
			resposta = Perfil.mostrarPerfil(utilizadorAutenticado);
			
			response.getWriter().println(resposta);
		}
		
		else if(address.indexOf("/uploadImagemPerfil") != -1) {
			response.setContentType("text/html");
			
			resposta = Perfil.uploadImagemPerfil(request, utilizadorAutenticado);
			
			response.getWriter().println(resposta);
			if(resposta.equals("1")) {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");	
			} else {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");
			}			
		}
		
		else if(address.indexOf("/mostrarImagemPerfil") != -1) {
			Perfil.mostrarImagemPerfil(response, utilizadorAutenticado);
		}
		
		else if(address.indexOf("/criarGaleria") != -1) {
			response.setContentType("text/html");
			
			String nome_galeria = request.getParameter("nomeGaleria");
			
			if(nome_galeria != null) {
				resposta = Galeria.criar(utilizadorAutenticado, nome_galeria);
			} else {
				resposta = "-1";
			}
			
			response.getWriter().println(resposta);
			if(resposta.equals("1")) {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");	
			} else {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");
			}
		}
		
		else if(address.indexOf("/eliminarGaleria") != -1) {
			response.setContentType("text/html");
			
			String nome_galeria = request.getParameter("nomeGaleria");
			
			if(nome_galeria != null) {
				resposta = Galeria.eliminar(utilizadorAutenticado, nome_galeria);
			} else {
				resposta = "-1";
			}
			
			response.getWriter().println(resposta);
			if(resposta.equals("1")) {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");	
			} else {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");
			}
		}
		
		else if(address.indexOf("/eliminarImagem") != -1) {
			response.setContentType("text/html");
			
			String nome_galeria = request.getParameter("nomeGaleria");
			String nome_imagem = request.getParameter("nomeImagem");
			
			if(nome_galeria != null || nome_imagem != null) {
				resposta = Imagem.eliminar(utilizadorAutenticado, nome_imagem, nome_galeria);
			} else {
				resposta = "-1";
			}
			
			response.getWriter().println(resposta);
			if(resposta.equals("1")) {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");	
			} else {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");
			}
		}
		
		else if(address.indexOf("/uploadImagemGaleria") != -1) {
			response.setContentType("text/html");
			
			String nome_galeria = request.getParameter("nomeGaleria");
			
			if(nome_galeria != null) {
				resposta = Galeria.uploadImagemGaleria(request, utilizadorAutenticado, nome_galeria);
			} else {
				
				System.out.println("ola");
				resposta = "-1";
			}
			
			response.getWriter().println(resposta);
			if(resposta.equals("1")) {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");	
			} else {
				response.setHeader("Refresh", "3; URL=" + url + "/perfil");
			}			
		}
		
		else if(address.indexOf("/mostrarImagemGaleria") != -1) {
			String nome_galeria = request.getParameter("nomeGaleria");
			String nome_imagem = request.getParameter("nomeImagem");
			
			if(nome_galeria == null || nome_imagem == null) {
				response.sendRedirect("/noImage.jpg");
			} else {
				Galeria.mostrarImagemGaleria(response, utilizadorAutenticado, nome_galeria, nome_imagem);	
			}		
		}
		
		else if(address.indexOf("/mostrarNomeUtilizador") != -1) {
			response.setContentType("text/plain");
			response.getWriter().println(utilizadorAutenticado.nome_utilizador);
		}
		
		else if(address.indexOf("/mostrarNomeGalerias") != -1) {
			response.setContentType("text/plain");
			PersistenceManager pm = null;
			
			try {
				pm = PMF.get().getPersistenceManager();
				
				String query = "SELECT from " + Galeria.class.getName()
					+ " where email_utilizador == \"" + utilizadorAutenticado.email_utilizador + "\"";

				@SuppressWarnings("unchecked")
				List<Galeria> listaGalerias = (List<Galeria>) pm.newQuery(query).execute();
				if(listaGalerias.size() > 0) {
					for(int i = 0; i < listaGalerias.size(); i++) {
						if(!listaGalerias.get(i).nome_galeria.equals("vibe@live.com.pt")) {
							response.getWriter().println(listaGalerias.get(i).nome_galeria.toString() + "\n");
						}
					}
				} else {
					//response.getWriter().println("0");
				}
			} catch (Exception e) {

			} finally {
				pm.close();
			}
		}
		
		else if(address.indexOf("/mostrarNomeImagens") != -1) {
			response.setContentType("text/plain");
			
			String nome_galeria = request.getParameter("nomeGaleria");
			
			PersistenceManager pm = null;
			
			try {
				pm = PMF.get().getPersistenceManager();
				
				String query = "SELECT from " + Imagem.class.getName()
					+ " where email_utilizador == \"" + utilizadorAutenticado.email_utilizador + "\""
					+ " & nome_galeria == \"" + nome_galeria + "\"";
				
				@SuppressWarnings("unchecked")
				List<Imagem> listaImagens = (List<Imagem>) pm.newQuery(query).execute();
				if(listaImagens.size() > 0) {
					for(int i = 0; i < listaImagens.size(); i++) {
						response.getWriter().println(listaImagens.get(i).nome_imagem.toString() + "\n");	
					}
				} else {
					response.getWriter().println("0");
				}
			} catch (Exception e) {

			} finally {
				pm.close();
			}
		
		}
		
	}
}
